package com.example.dawinex;

import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.incross.dawin.DawinConfig;
import com.incross.dawin.util.BKLog;
import com.incross.dawin.util.CommonUtils;
import com.incross.dawin.views.DawinAdPlayer;

public class AdActivity extends Activity implements DawinAdPlayer.OnPlayFinishListener {
	
	private Context mContext;
	private SurfaceView mSurfaceView;
	
	private DawinAdPlayer mAdPlayer;
	private FrameLayout mVideoLayout;
	
	
	private TextView mTextView;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mContext = this.getApplicationContext();
		setViews();
		
		initPlayer(); // 다윈 초기화!!
		
		// 다윈 초기화를 끝낸 후 실제 광고를 호출할 때 아래의 메소드를 호출한다. 각각의 parameter는 인크로스 사업팀과 협의된 내용을 사용하면 된다. 
		// mcd에 해당하는 두번째 parameter는 테스트시 반드시 140번을 바라보게 하여 개발하고 테스트가 끝난 후 마켓 업로드시 아프리카 할당 MCD 84번으로 바꾸어 업로드 한다.
		mAdPlayer.showAd("01040100", "140", "27", "02020202", "1818");
	}
	
	public void setViews() {
		setContentView(R.layout.activity_ad);
		mVideoLayout = (FrameLayout) findViewById(R.id.rl_videoLayout);
		mSurfaceView = (SurfaceView) findViewById(R.id.sv_video);
		
		mTextView = (TextView) findViewById(R.id.tv_bottomArea); // Portrait 모드시 하단에 리스트가 있다고 가정하고 추가한 View. 실제 적용시 해당 부분은 제거.
		
		if(CommonUtils.getOrientation(mContext) == Configuration.ORIENTATION_LANDSCAPE) { // 가로모드의 경우 ListView가 사라지는 상황을 가정함. 실제 적용시 해당 부분은 제거.
			mTextView.setVisibility(View.GONE);
		} else {
			mTextView.setVisibility(View.VISIBLE);
		}
	}
	
	// 다윈 초기화시 참고부분!!
	public void initPlayer() {
		mAdPlayer = new DawinAdPlayer(this, mSurfaceView.getHolder()); // 이 부분은 아프리카의 요청사항으로 아프리카에 배포되는 라이브러리에서만 동작하는 생성자로 Parameter로는 반드시 현재 다윈을 호출하는 Activity와, SurfaceHolder를 추가하여 생성해야합니다.(필수!)
		mAdPlayer.setOnPlayFinishListener(this); // 광고종료 정보를 받기위해 Play finish listener 등록(필수!)
		mAdPlayer.setDawinServerType(DawinConfig.DAWIN_SERVER_REAL); // 반드시 DAWIN_SERVER_REAL 지정(필수!)
		mVideoLayout.addView(mAdPlayer); // 원하는 위치에 DawinAdPlayer추가. 
	}
	
	@Override
	public void onResume() {
		if(mAdPlayer != null) {
			// onResume에서 DawinAdPlayer의 onResume 호출.
			mAdPlayer.onResume();
		}
		super.onResume();
	}
	
	@Override
	public void onPause() {
		if(mAdPlayer != null) {
			mAdPlayer.onPause();
		}
		super.onPause();
	}
	
	@Override
	public void onBackPressed() {
		if(mAdPlayer != null) {
			mAdPlayer.onBackPressed();
		}
		super.onBackPressed();
	}
	
	
	@Override
	public void onConfigurationChanged (Configuration newConfig) {
		mAdPlayer.onConfigurationChanged();
		super.onConfigurationChanged(newConfig);
		if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
			mTextView.setVisibility(View.GONE);
		} else {
			mTextView.setVisibility(View.VISIBLE);
		}
	}
	
	@Override
	public void onPlayFinished(DawinAdPlayer dawinPlayer, int finishedBy) {
		switch(finishedBy) {
		case DawinAdPlayer.AD_FINISH_ACTION_COMPLETE:
			// 광고를 다 봤을 때 호출됩니다. 
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "광고 다 본 후 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_ACTION_SKIP:
			// 광고 재생 중 스킵을 클릭한 경우 호출된다.
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "스킵 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_SCREEN_CLICK:
			// 화면 클릭 이벤트가 있는 경우에 한해 화면을 클릭한 경우 호출된다.(AD_FINISH_ACTION_BUTTON_CLICK과 동일하게 동작하지만 액션 구분을 위해 분리함.)
			// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
			// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
			Toast.makeText(this, "화면클릭 종료", Toast.LENGTH_SHORT).show();
			break;
			
		case DawinAdPlayer.AD_FINISH_ACTION_BUTTON_CLICK:
			// 액션 버튼 이벤트가 있는 경우에 한해 액션 노출된 액션 버튼을 클릭한 경우 호출.
			// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
			// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
			Toast.makeText(this, "액션버튼 종료", Toast.LENGTH_SHORT).show();
			break;
			
		case DawinAdPlayer.AD_FINISH_CALL_ACTION:
			// 다윈 영상 재생중 전화 수신 등 전화와 관련된 동을 할 때 호출된다. (액션에 의한 전화 발신의 경우는 AD_FINISH_ACTION_BUTTON_CLICK 호출, 티커 전화상품으로 인한 전화 발신의 경우는 AD_FINISH_BY_TICKER 호출)
			// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
			// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
			Toast.makeText(this, "전화액션  종료", Toast.LENGTH_SHORT).show();
			break;
			
		case DawinAdPlayer.AD_FINISH_NO_APPLICABLE_AD:
			// 요청에 대한 광고가 없는 경우에 호출된다.
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "해당 광고 없음 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_BACK_KEY_PRESSED:
			// Back key를 누른 경우 호출이 되는데, Activity의 onBackPressed가 호출되는 시점에 DawinAdPlayer.onBackPressed()를 호출해야 동작한다.
			// 본 콘텐츠 재생불가(본 메세지 이후에 이전 페이지로 이동 등의 앱 설정을 따름)
			Toast.makeText(this, "Back key 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_AFTER_ACTION:
			// 화면 이벤트 또는 액션 버튼에 의해 클릭뷰어가 뜬 경우, 해당 클릭동작에서 화면클릭종료(또는 액션버튼 종료) 메세지를 보내주지만,
			// Activity의 onPause시 DawinAdPlayer.onPause(), onResume시 DawinAdPlayer.onResume()을 호출해 주어야 정상 동작함.
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "액션 동 후 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_BY_SNS_SHARE:
			// sns share 버튼을 클릭하여 공유 가능한 SNS List에서 최 우측의 링크 복사 및 X 버튼을 제외한 나머지 버튼을 클릭한 경우 호출됨. 이후 공유를 위해 단말 내장 브리우저로 해당 주소로 이동.(앱 이탈)
			// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
			// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
			Toast.makeText(this, "sns share button click", Toast.LENGTH_SHORT).show();
			break;
			
		case DawinAdPlayer.AD_FINISH_AFTER_SNS_SHARE:
			// sns share로 인해 앱 이탈 후 복귀
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "sns share action 후 복귀, 종료.", Toast.LENGTH_SHORT).show();
			finish();
			break;

		case DawinAdPlayer.AD_FINISH_BY_TICKER:
			// 티커 상품을 클릭하여 티커 상품에 할당된 액션을 실행하기 직전에 호출됨. 티커 전화 발신 상품을 제외하고 티커 해당 페이지 오픈을 위해 단말 내장 브리우저로 해당 주소로 이동.(전화상품 제외하고  앱 이탈)
			// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
			// 본 콘텐츠 재생불가(본 메세지 이후에 앱 이탈)
			Toast.makeText(mContext, "Ticker Button click", Toast.LENGTH_SHORT).show();
			break;

		case DawinAdPlayer.AD_FINISH_AFTER_TICKER:
			// ticker 클릭로 인해 앱 이탈 후 복귀
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "ticker action 후 복귀, 종료.", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_OTHER_REASON:
			// 위에 나열된 이유 이외에 정상적인 경로로 광고 정보 등을 받았으나, 기타 다른 이유로 Activity를 벗어나는 액션을 취한 경우(또는 슬립모드 진입)등 이상 현상 발생 호출된다.
			// Activity의 onPause시 DawinAdPlayer.onPause(), onResume시 DawinAdPlayer.onResume()을 호출해 주어야 사용 가능
			// 앱 이탈 이전에 처리할 내용이 있는 경우에 사용. 특별한 처리내용이 없으면 무시 가능함. 
			// 본 콘텐츠 재생불가(본 메세지 이후에 대부분 현재 페이지 사라지는 이슈 발생함)
			Toast.makeText(this, "기타 이유로 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_NETWORK_DISCONNECTED:
			// 광고요청시 네트워크가 끊어진 경우 호출된다.
			// 본 콘텐츠 재생 가능시점!! (다윈 광고를 요청한 시점에 끊어졌을 수도 있으므로 본 콘텐츠 재생요청 가능)
			Toast.makeText(this, "네트워크 끊어짐 오류 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_AD_INFO_RECEIVE_FAIL:
			// 광고정보 수신 실패시 호출. 타임아웃, 파싱 실패 등 다양한 이유로 광고 정보를 제대로 받지 못한 경우 호출.
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "광고 정보 수신 실패 오류 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
			
		case DawinAdPlayer.AD_FINISH_OTHER_ERROR:
			// DawinAdPlayer가 알 수 없는 미디어 플레이어 오류 발생, 또는 동작 중 에러 발생등의 비정상적인 상황에서 호출된다.
			// 본 콘텐츠 재생 가능시점!!
			Toast.makeText(this, "기타 오류 종료", Toast.LENGTH_SHORT).show();
			finish();
			break;
				
		}
	}

}
